#############课后作业
#完成四大基础数据结构的CRUD操作
#List(列表)
#list中存的元素是引用

## Create（增加）#append（）

l=[]
print(id(l))  # id 4379634688
l.append("a")
print(id(l))  # id  4379634688

#  + 和+=
l_1=['a']
l_2=['b']
l_3=l_1+l_2
print("------------- ",l_3)

l_3+=l_1
print("-------+=------ ",l_3)

# *和*=
a='a'
print(id(a))  # 4452342320
l=[a]*10
print("--------*-----",l)
print(id(l[0]))  # 4563065520
print(id(l[9]))   #4563065520

## 赋值语句之后, a已经是一个新的对象了
a='b'
print(l)
print(id(a))  #4538688240


#insert   指定位置添加元素

l.insert(0,"love")
print("-----insert--------",l)

###Retrieve(检索)
##索引取值
#所有序列都支持索引取值

#切片
#your_list[start:end:step]
print(l[0:9:2])
# 取一段区间
#your_list[start:end]
print(l[0:8])
# 取最后一个值
#your_list[-1]
print(l[-1])
# 间隔问题
#your_list[1:20:2]
print(l[1:20:2])

#index
print(l)
print("------index-----",l.index('love'))

##Update(更新)
#索引赋值
l[1]='a_1'
print(l)

#切片赋值
print(l)
l[0:2]="a"
print(l)
l[0:2]='11'
print(l)


###DELETE(删除)

##pop()
#从末尾删除元素并返回

print(l)
x=l.pop()
print(l)
print(x)

##clear()  清楚当前列表的元素, 不会改变列表的内存地址.
print(l)
#l.clear()
print(l)

# ★SORT(排序)
#sort()
l=[1,3,4,2,5,8,6]
l.sort()
print(l)

# sorted 排序后返回新列表
l2=sorted(l)
print(l2)

#reverse
l2.reverse()
print("---reverse----",l2)

#reversed  倒序之后返回新列表  (这个有问题)
#print(l)
#list(reversed(l))
#print(l)


###tuple

##Create

##无

##Retrieve

#索引取值
#index
#切片
#Update  无
#Delete 无

## dict
#create 键对值赋值
#update 提供合并字典的功能
d={"a":1}
print(d)
d2={"b":2,"c":3}
d.update(d2)
print("---update---",d)

#setdefault
#如果字典中没有当前key, 那么就设置默认值

d.setdefault('b',0)
print(d)
d.setdefault('d',0)
print(d)


##Retrieve

#键对值访问

#get
#键对值访问缺失key会报错, 而get可以指定默认值


#print(d['e'])
#     print(d['e'])
# KeyError: 'e'
c=d.get('f',0)
print(c)

##keys()  返回所有key

print("-----keys----",d.keys())

##values() 返回所有value
print(d.values())

##items()  返回所有键对值
print(d.items())

#Update  键对值赋值

d['a']=100
print(d)

#update
d.update({"b":200,"c":300})
print(d)

###Delete

##pop(key)  删除当前元素并返回value

##popitem()  对于人来说, 相当于随机返回一个item

##clear()


##set

#Create
s=set({1,2,3,4})
print(s)


#add
s.add(5)
print(s)
#update
#s.update(66)
print(s)

##Retrieve

#运算符in
print( 1 in s)


#update

#union   合并两个set, 并返回一个新的set

s1=set({1})
s2=set({2})
s3=s1.union(s2)
print("set.union",s3)

##delete

#remove 和discard

#discard缺失元素时不会报错, 而remove会报错

s=set({'a','b','c'})
print(s)
s.remove('a')
print(s)
s.discard("e")
print(s)
#s.remove('a')     #s.remove('a')  KeyError: 'a'
print(s)

#pop()  当成无序删除并返回元素
s.pop()
print(s)
